import pyautogui
import time
import sys
import os
from PIL import Image, ImageOps

# 配置参数
CONFIRM_BUTTON_IMAGE = "confirm_button.png"  # 确定按钮截图文件名
CHECK_INTERVAL = 2  # 检查间隔(秒)
MAX_ATTEMPTS = 5  # 最大尝试点击次数
SCREENSHOT_DIR = "screenshots"  # 截图保存目录

# 创建截图目录
os.makedirs(SCREENSHOT_DIR, exist_ok=True)


def take_screenshot():
    """获取屏幕截图并保存"""
    timestamp = time.strftime("%Y%m%d_%H%M%S")
    filename = os.path.join(SCREENSHOT_DIR, f"screenshot_{timestamp}.png")
    screenshot = pyautogui.screenshot()
    screenshot.save(filename)
    return screenshot


def find_and_click_confirm_button():
    """在屏幕上查找并点击确认按钮"""
    # 尝试使用不同相似度阈值查找按钮
    for confidence in [0.9]:
        try:
            # 查找按钮位置
            button_pos = pyautogui.locateOnScreen(
                CONFIRM_BUTTON_IMAGE,
                confidence=confidence,
                grayscale=True
            )

            if button_pos:
                # 计算按钮中心位置
                center_x = button_pos.left + button_pos.width // 2
                center_y = button_pos.top + button_pos.height // 2

                # 移动鼠标到按钮位置
                pyautogui.moveTo(center_x, center_y, duration=0.3)
                time.sleep(0.2)

                # 点击按钮
                pyautogui.click()

                print(f"✅ 已点击确定按钮 (置信度: {confidence:.1f})")
                take_screenshot()  # 保存点击后的屏幕截图
                return True
        except pyautogui.ImageNotFoundException:
            continue
        except Exception as e:
            print(f"⚠️ 查找按钮时出错: {str(e)}")

    return False


def main():
    print("""
    🚀 Chrome浏览器自动点击确定按钮程序
    ===================================
    使用说明:
    1. 请确保Chrome浏览器窗口可见且未被遮挡
    2. 程序将每2秒检查一次屏幕上是否有确定按钮
    3. 找到按钮后程序会自动点击
    4. 程序会持续运行直到手动停止

    操作提示:
    - 按 Ctrl+C 停止程序
    - 点击后的屏幕截图保存在 screenshots 目录
    """)

    # 检查按钮图像是否存在
    if not os.path.exists(CONFIRM_BUTTON_IMAGE):
        print(f"❌ 错误: 未找到按钮图像文件 '{CONFIRM_BUTTON_IMAGE}'")
        print("请先截取确定按钮的图片并保存为此文件名")
        sys.exit(1)

    print("▶️ 开始监控，等待确定按钮出现...")

    try:
        while True:
            # 尝试查找并点击按钮
            found = find_and_click_confirm_button()

            if found:
                # 点击后等待一段时间，避免重复点击同一窗口
                print(f"⏳ 等待{CHECK_INTERVAL * 2}秒后继续监控...")
                time.sleep(CHECK_INTERVAL * 2)
            else:
                # 未找到按钮时等待
                time.sleep(CHECK_INTERVAL)

                # 显示状态信息（每10次检查显示一次）
                if int(time.time()) % (CHECK_INTERVAL * 10) < CHECK_INTERVAL:
                    print("👀 监控中... (按 Ctrl+C 停止)")

    except KeyboardInterrupt:
        print("\n🛑 程序已停止")
    except Exception as e:
        print(f"❌ 发生错误: {str(e)}")
        take_screenshot()  # 保存错误发生时的截图


if __name__ == "__main__":
    main()